class Tools {
    constructor() {
        this.instance=null;
    }

    post(url, data={}, op={}) {
        //fetch post 请求的配置信息
        const config = {
            //mode: 'no-cors',
            method: 'POST',
            headers: {
                //'Accept': '/',
                'Content-Type': 'application/x-www-form-urlencoded',//提交表单数据
                //'Access-Control-Allow-Origin': '*', 
            },
            //credentials: 'include',
            ...op,
            body:(typeof data ==="string" ?data :this.encodeSearchParams(data))
        }
        
        return this.request(url,config);
    }
    get(url, data={}, op={}) {
       url =url +"?" +this.encodeSearchParams(data);
       return this.request(url,op);
    }
    // 公共数据请求方法
    request(url, op={}) {
        //fetch 默认 get 请求的配置信息
        const config = {
            //mode: 'no-cors',
            method: 'GET',
            //credentials: 'include' //设置请求时带cookie
        }
        // 发送fetch 数据请求，并合并配置参数信息。
        return fetch(url, {...config,...op}).then(res => { 
            return res.json();
        }).catch(e=>{
            // 数据异常打印的log 日志
            console.log(`Tools类 request方法:  ${e}`);
        })

    }
    /**
	 * 拼接对象为请求字符串
	 * @param {Object} obj - 待拼接的对象
	 * @returns {string} - 拼接成的请求字符串
	 */
	encodeSearchParams(obj) {
		const params = [];
		Object.keys(obj).forEach((key) => {
			let value = obj[key];
			// 如果值为undefined我们将其置空
			if (typeof value === 'undefined') {
				value = ''
			}
			// 对于需要编码的文本（比如说中文）我们要进行编码
			params.push([key, encodeURIComponent(value)].join('='));
		});
		return params.join('&');
	}
    static getInstance(){
        if(!this.instance){
            this.instance=new Tools();
        }
        return this.instance;
    }

}
export default Tools.getInstance();